import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import obfuscator from 'rollup-plugin-obfuscator'

// https://vite.dev/config/
export default defineConfig(() => {
  return {
    base: '/geometry/',
    plugins: [
      react(),
    ],
    
    build: {
    // 生产环境移除 console 和 debugger
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
        pure_funcs: ['console.log', 'console.info', 'console.debug', 'console.warn'],
      },
      format: {
        comments: false, // 移除所有注释
      },
    },
    
    // 分块策略 - 增加逆向难度
    rollupOptions: {
      output: {
        // 手动分块
        manualChunks: {
          'react-vendor': ['react', 'react-dom'],
        },
        
        // 使用哈希命名文件
        chunkFileNames: 'assets/[name]-[hash].js',
        entryFileNames: 'assets/[name]-[hash].js',
        assetFileNames: 'assets/[name]-[hash].[ext]',
      },
      
      // Rollup 插件配置
      plugins: [
        obfuscator({
          // 压缩代码
          compact: true,
          
          // 控制流平坦化 - 使代码逻辑更难理解
          controlFlowFlattening: true,
          controlFlowFlatteningThreshold: 0.75,
          
          // 死代码注入 - 增加无用代码干扰
          deadCodeInjection: true,
          deadCodeInjectionThreshold: 0.4,
          
          // 禁用控制台输出
          disableConsoleOutput: true,
          
          // 标识符名称生成器 - 使变量名难以理解
          identifierNamesGenerator: 'hexadecimal',
          
          // 忽略导入的库
          ignoreImports: true,
          
          // 数字转换为表达式
          numbersToExpressions: true,
          
          // 重命名全局变量
          renameGlobals: false,
          
          // 旋转字符串数组
          rotateStringArray: true,
          
          // 种子（可以自定义以获得一致的混淆结果）
          seed: 0,
          
          // 自我保护 - 防止代码被美化
          selfDefending: true,
          
          // 简化字符串数组调用
          simplify: true,
          
          // 分割字符串
          splitStrings: true,
          splitStringsChunkLength: 10,
          
          // 字符串数组编码
          stringArray: true,
          stringArrayCallsTransform: true,
          stringArrayCallsTransformThreshold: 0.75,
          stringArrayEncoding: ['base64'],
          stringArrayIndexShift: true,
          stringArrayRotate: true,
          stringArrayShuffle: true,
          stringArrayWrappersCount: 2,
          stringArrayWrappersChainedCalls: true,
          stringArrayWrappersParametersMaxCount: 4,
          stringArrayWrappersType: 'function',
          stringArrayThreshold: 0.75,
          
          // Unicode转义序列
          unicodeEscapeSequence: false,
          
          // 目标环境
          target: 'browser',
        }),
      ],
    },
    
    // 生成 source map（建议不生成，但如果需要内部调试可以设为 'hidden'）
    sourcemap: false,
    
    // 分块大小警告限制
    chunkSizeWarningLimit: 1000,
    },
    
    // 开发服务器配置
    server: {
      proxy: {
        '/geometry/api': {
          target: 'http://localhost:3000',
          changeOrigin: true,
        }
      }
    }
  }
})
